package edu.seminario

import javax.swing.text.View;

import grails.converters.JSON

import org.codehaus.groovy.grails.web.json.JSONArray
import org.codehaus.groovy.grails.web.json.JSONObject

class BuscarPorUsuarioController {

	BusquedaPorUsuarioService busquedaPorUsuarioService

	def index = { }

	/**
	 * Viene de esta forma
	 * {user_admin_id: 0, criterios: {edad_desde: 0, edad_hasta:0, sexo:'m'/'f', pedido_tarjeta_credito:'s'/'n',
	 * 	pedido_cuponeras:'s'/'n', cantidad_resultados: 0} }
	 *
	 * Criterios:
	 * Falta poner los criterios
	 *
	 *
	 * Devlvemos de esta forma
	 *
	 * {success: true / false, data: 
	 * 	{	cantidad_muestras: N, resultados_obtenidos: M, total: P,
	 * 		list: [usuario1, usuario2, .....,usuarioN]
	 * 	} 
	 * }
	 *
	 */
	def buscar = {

//		String json = "{user_admin_id: 1, criterios: {edad_desde: 19, edad_hasta: 30, sexo:'m', pedido_tarjeta_credito:'s', pedido_cuponeras:'s', cantidad_resultados: 100} }"
//		JSONObject jsonObject = JSON.parse(json)

		JSONObject jsonObject = JSON.parse(params.json)

		def userAdminId = jsonObject.user_admin_id
		JSONObject criteriosJsonObject = jsonObject.criterios

		def edadDesde = criteriosJsonObject.edad_desde
		def edadHasta = criteriosJsonObject.edad_hasta
		def sexo = criteriosJsonObject.sexo
		def pedidoTarjetaCredito = "s".equalsIgnoreCase(criteriosJsonObject.pedido_tarjeta_credito) ? true : false
		def pedidoCuponeras = "s".equalsIgnoreCase(criteriosJsonObject.pedido_cuponeras) ? true : false
		def cantidadResultados = criteriosJsonObject.cantidad_resultados

		def criterios = ["edadDesde": new Criterio(nombre: "edadDesde", valor: edadDesde),
					"edadHasta":new Criterio(nombre: "edadHasta", valor: edadHasta),
					"sexo":new Criterio(nombre: "sexo", valor: sexo),
					"pedidoTarjetaCredito":new Criterio(nombre: "pedidoTarjetaCredito", valor: pedidoTarjetaCredito),
					"pedidoCuponeras":new Criterio(nombre: "pedidoCuponeras", valor: pedidoCuponeras),
					"cantidadResultados":new Criterio(nombre: "cantidadResultados", valor: cantidadResultados)]

		JSONObject answerJson = new JSONObject()
		try {
			List answer = busquedaPorUsuarioService.buscar(userAdminId, criterios)
	
			def numerosUsuarios =  UsuarioOleo.list().size()
			answerJson.put('success', true)
			answerJson.put('cantidad_encontrada', answer.size())
			answerJson.put('total',  numerosUsuarios)
	
			JSONArray usuariosJson = new JSONArray()
			answer.each {
				usuariosJson.add(it.transformToJson())
			}
	
			answerJson.put('list', usuariosJson)
		} catch (RuntimeException e) {
			answerJson = new JSONObject()
			answerJson.put('success', false)
			answerJson.put('problem', e.getMessage())
		}

		jsonOutput(answerJson)
	}

	def jsonOutput(Object json) {
		response.setHeader('Content-disposition', 'filename="json"')
		response.contentType = "text/json"
		render json as JSON
	}
}
